﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaDB;
using ForrajeriaBCL;

namespace ForrajeriaFRONT.ABM
{
    public partial class Forraje : System.Web.UI.Page
    {

        private ForrajeBCL objBC;
        private ForrajeMO objEditar;
        private AnimalXForrajeMO objDetalle;


        public Forraje() //constructor
        {
            objBC = new ForrajeBCL();


        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MarcaBCL objMarca = new MarcaBCL();
                List<MarcaMO> listaMarca = objMarca.GetAll();



                cmbMarca.Items.Add(new ListItem("---Seleccione---", "0"));
                foreach (MarcaMO aux in listaMarca)
                {
                    cmbMarca.Items.Add(new ListItem(aux.Descripcion.ToString(), aux.CodigoMarca.ToString()));

                }

                EdadesBCL objEdades = new EdadesBCL();
                List<EdadesMO> listaEdades = objEdades.GetAll();
                cmbEdad.Items.Add(new ListItem("---Seleccione---", "0"));
                foreach (EdadesMO aux in listaEdades)
                {
                    cmbEdad.Items.Add(new ListItem(aux.Descripcion.ToString(), aux.CodigoEdad.ToString()));
                }

                AnimalBCL objAnimal = new AnimalBCL();
                List<AnimalMO> listaAnimal = objAnimal.GetAll();
                chkAnimales.DataSource = listaAnimal;
                chkAnimales.DataTextField = "Nombre";
                chkAnimales.DataValueField = "CodigoAnimal";
                chkAnimales.DataBind();
                cmbEdad.DataBind();
                cmbMarca.DataBind();
                modoVentana("bloqueado");
            }




        }


        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            modoVentana("busqueda");
            cargarLista();
            pnlModal_ModalPopupExtender.Show();

        }

       
        protected void onRowSelected(Dictionary<string, string> objReto) //el parametro de este metodo utiliza un objeto del tipo clave valor para poder realizar la asignacion al objeto la clave esta dada 
                                                                         //por el valor que se le haya asignado al campo datafield de la matriz que recibe el control al inicializarlo.
        {
            double asd;
            objEditar = new ForrajeMO();
            objEditar.CodigoForraje = int.Parse(objReto["codigoForraje"]);
            objEditar.Descripcion = (objReto["descripcion"])??"";
            objEditar.NombreForraje = objReto["nombreForraje"];
            objEditar.StockActual = int.Parse(objReto["stockActual"]);
            
            if(double.TryParse((objReto["stockMinimo"]), out asd))
                objEditar.StockMinimo = asd;

            if (double.TryParse((objReto["stockMaximo"]), out asd))
                objEditar.StockMaximo = asd;

            objEditar.CodigoEdad = int.Parse(objReto["codigoEdad"]);
            if(double.TryParse((objReto["peso"]),out asd))
                objEditar.Peso = asd;

            objEditar.Estado = (objReto["estado"]).ToString();
            objEditar.CodigoMarca = int.Parse(objReto["CodigoMarca"]);
            objEditar.PrecioXKilo = double.Parse(objReto["PrecioxKilo"]);

            ViewState["objEditar"] = objEditar;

            txtDescripcion.Text = objEditar.Descripcion;
            txtNombre.Text = objEditar.NombreForraje;
            txtPeso.Text = objEditar.Peso.ToString();
            txtStockActual.Text = objEditar.StockActual.ToString();
            txtStockMaximo.Text = objEditar.StockMaximo.ToString();
            txtStockMinimo.Text = objEditar.StockMinimo.ToString();
            cmbEdad.SelectedValue = objEditar.CodigoEdad.ToString();
            cmbMarca.SelectedValue = objEditar.CodigoMarca.ToString();
            txtprecio.Text = objEditar.PrecioXKilo.ToString();
            List<AnimalMO> listaCheck = new List<AnimalMO>(); 
            listaCheck = objBC.getDetalle(objEditar);

            for(int i = 0; i < chkAnimales.Items.Count; i++)
            {

                foreach(AnimalMO aux in listaCheck)
                {
                    if(aux.CodigoAnimal == int.Parse(chkAnimales.Items[i].Value.ToString()))
                    {
                        chkAnimales.Items[i].Selected = true;

                    }
                                  
                }
            }

        }

        protected void btn_fake_Click(object sender, EventArgs e)
        {

        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            objEditar = (ForrajeMO)ViewState["objEditar"];
            if (objEditar == null)
            {
                objEditar = new ForrajeMO();
              

                objEditar.Descripcion = txtDescripcion.Text;
                objEditar.NombreForraje = txtNombre.Text;

                if (txtPeso.Text.Trim() == "")
                    objEditar.Peso = null;
                else
                    objEditar.Peso = double.Parse(txtPeso.Text);

                objEditar.StockActual = double.Parse(txtStockActual.Text);

                if (txtStockMinimo.Text.Trim() == "")
                    objEditar.StockMinimo = 0;
                else
                    objEditar.StockMinimo = double.Parse(txtStockMinimo.Text);

                if (txtStockMaximo.Text.Trim() == "")
                    objEditar.StockMaximo = null;
                else
                    objEditar.StockMaximo = double.Parse(txtStockMaximo.Text);


                objEditar.CodigoEdad = int.Parse(cmbEdad.SelectedValue);
                objEditar.CodigoMarca = int.Parse(cmbMarca.SelectedValue);
                objEditar.PrecioXKilo = double.Parse(txtprecio.Text);
                objEditar.Estado = "A";

//***************************************** DETALLE DE FORRAJE ANIMAL *******************************************************************
                List<AnimalXForrajeMO> listaDetalle = new List<AnimalXForrajeMO>();
                for (int i = 0; i < chkAnimales.Items.Count; i++)
                {
                    if (chkAnimales.Items[i].Selected)
                    {
                        objDetalle = new AnimalXForrajeMO();
                        objDetalle.CodigoAnimal = int.Parse(chkAnimales.Items[i].Value);
                        objDetalle.CodigoForraje = 0; //porque en este punto el valor del Forraje es nulo 
                        listaDetalle.Add(objDetalle);
                        objDetalle = null;
                    }
                }
//******************************************** FIN DETALLE *******************************************************************************
                string resu;
                resu = objBC.AdicionarConDetalle(objEditar,listaDetalle);

                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }

            }
            else //update
            {
                ForrajeMO objActual = new ForrajeMO();

                objActual.CodigoForraje = objEditar.CodigoForraje;

                objActual.Descripcion = txtDescripcion.Text;
                objActual.NombreForraje = txtNombre.Text;

                if (txtPeso.Text.Trim() == "")
                    objActual.Peso = null;
                else
                    objActual.Peso = double.Parse(txtPeso.Text);

                objActual.StockActual = double.Parse(txtStockActual.Text);

                if (txtStockMinimo.Text.Trim() == "")
                    objActual.StockMinimo = 0;
                else
                    objActual.StockMinimo = double.Parse(txtStockMinimo.Text);

                if (txtStockMaximo.Text.Trim() == "")
                    objActual.StockMaximo = null;
                else
                    objActual.StockMaximo = double.Parse(txtStockMaximo.Text);

                objActual.CodigoEdad = int.Parse(cmbEdad.SelectedValue);
                objActual.CodigoMarca = int.Parse(cmbMarca.SelectedValue);
                objActual.PrecioXKilo = double.Parse(txtprecio.Text);
                objActual.Estado = "A";
//***************************************** DETALLE DE FORRAJE ANIMAL *******************************************************************
                List<AnimalXForrajeMO> listaDetalle = new List<AnimalXForrajeMO>();
                for (int i = 0; i < chkAnimales.Items.Count; i++)
                {
                    if (chkAnimales.Items[i].Selected)
                    {
                        objDetalle = new AnimalXForrajeMO();
                        objDetalle.CodigoAnimal = int.Parse(chkAnimales.Items[i].Value);
                        objDetalle.CodigoForraje = objEditar.CodigoForraje;
                        listaDetalle.Add(objDetalle);
                        objDetalle = null;
                    }
                }
 //******************************************** FIN DETALLE *******************************************************************************

                string resu;
                resu = objBC.ActualizarConDetalle(objActual, objEditar, listaDetalle);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }


            }
            ViewState["objEditar"] = null;
            modoVentana("bloqueado");
            mensaje.Visible = true;


        }


        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            ViewState["objEditar"] = null;
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            modoVentana("edicion");
        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            objEditar = (ForrajeMO)ViewState["objEditar"];
            if (objEditar != null)
            {
                string resu = objBC.Eliminar(objEditar);
                if (resu == "1")
                {
                    mensaje.Text = "Eliminado Correctamente";
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                }
            }
            else
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = "Debe seleccionar algo para eliminar";
            }

            modoVentana("bloqueado");
            mensaje.Visible = true;

        }



        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        public void ControlState(ControlCollection controles, Boolean estado)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }


        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    mensaje.Visible = false;
                    break;
                case "edicion":
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;

                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;
            }
        }

      


        protected void cargarLista()
        {

            List<ForrajeMO> lista = objBC.GetAll();

            //************* matriz que determina que columna se muestra y cual no *************************************

            string[,] mostrar = new string[3, 11];
            mostrar.Initialize();

            //CABECERA DE LAS COLUMNAS QUE SE MUESTRAN 
            mostrar[0, 1] = "Descripcion";
            mostrar[0, 2] = "Nombre";
            mostrar[0, 3] = "Stock Actual";
            mostrar[0, 10] = "Precio/Kilo";
            //COLUMNAS A MOSTRAR
            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";
            mostrar[1, 3] = "1";
            mostrar[1, 10] = "1";

            //CAMPOS DATAFIELD 
            mostrar[2, 0] = "codigoForraje";
            mostrar[2, 1] = "descripcion";
            mostrar[2, 2] = "nombreForraje";
            mostrar[2, 3] = "stockActual";
            mostrar[2, 4] = "stockMinimo";
            mostrar[2, 5] = "stockMaximo";
            mostrar[2, 6] = "codigoEdad";
            mostrar[2, 7] = "peso";
            mostrar[2, 8] = "estado";
            mostrar[2, 9] = "CodigoMarca";
            mostrar[2, 10] = "PrecioxKilo";



            //**********************************************************************************************************
            usrBusqueda.initi(lista, mostrar, "ForrajeMO");


        }



    }
}